/*
 * RBFCommon.h
 *
 *  Created on: 2023年7月12日
 *      Author: fjx
 */

#ifndef MAC_RBFCOMMON_H_
#define MAC_RBFCOMMON_H_

#include "RBFMacMessageTypes.h"
#include "RBFVersion.h"


/*
 *
 *@note 模块角色: 分为RBF_MODLE_RBM,RBF_MODLE_HUB
 *
 */
#define RBF_MODLE_HUB                    0 //HUB角色
#define RBF_MODLE_RBM                    1 //RBM角色

#ifndef RBF_MODLE
#define RBF_MODLE                        RBF_MODLE_RBM
#endif

/*@note 制造商
 *
 *manufacturer
 */
typedef enum{
  MANUFACTURER_FIRST = 1,
  MANUFACTURER_DUSUN = MANUFACTURER_FIRST,


  MANUFACTURER_LAST,
}manufacturer_t;

#define MANUFACTURER_COUNT                (MANUFACTURER_LAST-MANUFACTURER_FIRST)

#ifndef MANUFACTURER_TYPE
#define MANUFACTURER_TYPE                  MANUFACTURER_DUSUN
#endif


RBF_RET_STATUS RBF_payload_crypto_build_nonce (const uint8_t *packet, uint16_t packet_len,
                                     uint8_t nonce[RBF_NONCE_LENGTH_MAX]);

RBF_RET_STATUS RBF_payload_crypto_build_ad (const uint8_t *packet, uint16_t packet_len,
                                  uint8_t ad[RBF_AD_LENGTH_MAX]);

/*
 *@brief header 组包
 *@param hdr  header结构体数据
 *@param packet  header组包后的数据buffer(含CMD),大端模式
 *@param
 *@return 无返回
 */
void RBF_packet_build_header(RBFMacHeader_t hdr,uint8_t *packet);//packet[RBF_HEADER_LENGTH_MAX]);

/*
 *@brief header 解包
 *@param packet  所要解包的数据指针，该数据包含MAC的长度字段
 *@param len     所要解的packet的数据长度
 *@param hdr     解包后header结构体数据
 *@param
 *@return = RBF_RET_STATUS_SUCCESS, 解包成功; =RBF_RET_STATUS_FAIL,解包失败，长度不够。
 */
RBF_RET_STATUS RBF_header_parse(uint8_t *packet,uint16_t packet_len, RBFMacHeader_t *hdr);


#endif /* MAC_RBFCOMMON_H_ */
